<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  
</body>
 <script>



// 一、谈一谈 async和await
//   ● 什么是 async和await：  
//     ○ 专门用来解决异步编程问题，是终极解决方案，用同步表达异步操作
//     ○ async是用来声明某个函数是异步函数,await是等待一个异步的执行
//   ● await的使用：
//     ○ await只能等待promise实例，其他的一概不等（但是await语句后的所有都变成了异步）
//     ○ await等待的promise实例变成成功状态了，则继续向下之后await语句后的内容，await返回当前成功promise实例的值
//     ○ 当await等待的是失败的promise实例的时候，则直接退出当前async函数，不再执行函数的其他语句
//   ● async函数的返回值：
//     ○ 默认返回成功的promise实例，值为async函数内部return的值(如果return的是promise实例,则async返回的promise和这个promise保持一致)
//     ○ 当async中的await等待的是失败的promise实例的时候，async函数直接返回失败的promise实例，值为内部失败promise实例的值
//     ○ 当async函数内部报错，则async函数直接返回失败的promise实例，值为错误信息
  async function fn(){
    console.log(`start`);
    try{
      // throw new Error(`fhh`)
      await new Promise((resolve,reject)=>{
      setTimeout(()=>{
      console.log(`计时器`);
      // resolve()
      console.log(`计算器之后的代码`);
    },2000)
   
    })
    // return 1
    }catch(e){
      console.log(e.message);
    }
    // return 1

  }
  // fn()
  const result = fn()
  console.log(`result`,result);
  console.log(`end`);
  //正常情况 应该是 start  计算器之后的代码 end 计算器
  //结果情况 是 start  end  计算器之后的代码  计算器
  //原因 await 之后的代码都变成异步的了
  //带上 await 只会等 promise实列 其他的不等 
  //所以异步 代码 log先 计时器等待两秒才执行 所以先 计算器之后的代码 在 计算器
 </script>
</html>